SQL u Delphi-ju (I deo)


SQL u Delphi-ju (I deo)

SQL (Structured Query Language) je standardizovani jezik za definisanje i manipulisanje podacima u relacionim bazama podataka putem tzv. "upita", a više o njemu možete pročitati u prethodnim prolozima ove rubrike (mali kurs SQL-a). Ali tema ovog priloga nije sam SQL, već njegova veza sa Delphi-jem.

Ako budete želeli da koristite SQL u vašim aplikacijama, onda bi trebalo da bolje upoznate komponentu TQuery, preko koje Delphi direktno omogućava da pristupite podacima smeštenim u tabelama različitih vrsta baza podataka (dBase, InterBase, Paradox, Access itd.). Takođe, pomoću ove komponente možete spajati i podatke iz različitih izvora (na primer, možete spojiti podatke iz Access i Oracle tabela). Za upite, komponenta TQuery poseduje osobinu "SQL" u koju smeštamo samu sintaksu upita. Pri tome komponenta sadrži jedan ili više upita, može da ih izvršava i obezbeđuje nam metode za manipulaciju rezultatima upita.

Generalno upite možemo podeliti u dve kategorije: one koje kao rezultat daju skup podataka (npr. SELECT upiti) i one koji ne rezultuju nikakvim skupom podataka (npr. UPDATE ili INSERT upiti). Za samo izvršenje upita koji rezultuju podacima koristi se metoda "TQuery.Open", a za ove druge - metoda "TQuery.ExecSQL"

Komponenta TQuery može da vrati dve vrste rezultujućih skupova:

  • dinamičke, preko komponente TTable (gde korisnici mogu da menjaju podatke)
  • tzv. "read only" (gde su podaci dostupni samo za pregled, ali ne i za menjanje)

Da bi dobili dinamički set podataka, osobina komponente "RequestLive" treba da ima vrednost "True", a sam upit treba da zadovolji neke specifične zahteve (u ovakvim upitima ne smeju da se koriste ključne reči: ORDER BY, SUM, AVG itd.). Upiti su, na neki način, po "ponašanju" slični filterima, ali su mnogo moćniji jer vam dopuštaju mnogo više: možete spajati više tabela, izdvajati podskupove itd. U sledećem prilogu videćemo i jedan primer korišćenja TQuery komponente.


stats

SQL u Delphi-ju (II deo)


SQL u Delphi-ju (II deo)

Kao što smo i najavili, u ovom prilogu ćemo videti kako da kreiramo mali program koji će pristupati nekoj bazi podataka preko SQL upita, tj. TQuery komponente. Ićićemo korak po korak, a za početak pokrenite Delphi:

  1. Na praznu formu novog projekta postavite sledeće komponente: TQuery, TDataSource, TDBGrid, TEdit i TButton.

  2. Osobinu "DataSet" komponente TDataSource, postavite na "Query1".

  3. Osobinu "DataSource" komponente TDBGrid, postavite na "DataSource1".

  4. Osobinu "DatabaseName" komponente TQuery, postavite na "DBDEMOS". Ovo je baza podataka koja dolazi uz instalaciju Delphi-ja.

  5. Sada ćemo uneti SQL upit u osobinu "SQL" komponente TQuery, kojim ćemo iz tabele "Employee" (zaposleni) izdvojiti imena i prezimena zaposlenih radnika, i njihove plate (FirstName, LastName, Salary). Kliknite dvostruko na osobinu "SQL", te u editor stringova unesite sledeći upit:
    SELECT FirstName, LastName, Salary
    FROM Employee.db;
    

  6. Da bi odmah sada, znači još prilikom projektovanja programa, mogli da vidimo rezultat upita u komponenti TDBGrid - postavite osobinu "Active" komponente TQuery na "True". Kao što možete da vidite, "rešetka" će prikazati sve slogove tabele "Employee", ali u tri izabrane kolone (FirstName, LastName, Salary).

  7. Na kraju ćemo dugmetu dodeliti progrmaski kod, kojim ćemo po pokretanju programa, poništiti ugrađeni upit i pozvati novi. Sledeći kod ubacite u događaj "OnClick" dugmića:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Query1.Close;{zatvaranje upita}
    //novi SQL izraz
    Query1.SQL.Clear;
    Query1.SQL.Add ('Select FirstName, LastName, Salary');
    Query1.SQL.Add ('FROM Employee.db');
    Query1.SQL.Add ('WHERE Salary > ' + Edit1.Text);
    Query1.Open; {pokretanje upita i prikaz podataka}
    end;
    

  8. Pokrenite projekt, pritiskom na "F9".

Rezultat osnovnog upita će biti već ranije prikazani rezultat, a unosom visine plate u tekst - polje i klikom na dugme pokrenućemo novi upit, kojim ćemo izdvojiti slogove tj. radnike čija plata prelazi određeni iznos (onaj koji ste uneli u tekst - polje). Ovim smo dobili program sa statičkim (read-only) podacima, ukoliko želite da podatke u tabeli i menjate, osobinu RequestLive postavite na "True".